package com.huilian.iotbox.data.po;

import com.huilian.iotbox.data.dto.QueryParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author 畅
 * @since 2020-04-09
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Order extends QueryParam implements Serializable {

    private static final long serialVersionUID = -5635597177549812921L;

    private Long id;

    /**
     * 收款商户类型  1.自有商户  2.平台商户 3.现金收款 4.余额支付 5.抖音团购 6.美团团购 7.线下收款码
     */
    private Integer mchType;

    /**
     * 场地id
     */
    private Integer merchantStoreId;

    /**
     * 设备类型id
     */
    private Integer deviceTypeId;

    /**
     * 外部交易单号
     */
    private String outTradeNo;

    /**
     * 设备号，device表。自助终端
     */
    private String deviceNo;

    /**支付唯一码  出货码*/
    private String payNo;

    /**
     * 设备号，app_device_empower表。人工终端
     */
    private String sn;

    /**
     * 商品描述
     */
    private String body;

    /**
     * 交易总额度
     */
    private BigDecimal totalAmount;

    /**
     * 优惠金额，主要用于生成随机金额，防止风控
     */
    private BigDecimal discountMoney;

    /**
     * 实际支付金额
     */
    private BigDecimal refundTotalAmount;
    /**
     * 扭蛋机次数
     */
    private Integer times;
    /**
     * 销售币
     */
    private Integer saleCoin;
    /**
     * 赠送币
     */
    private Integer giveCoin;
    /**
     * 总币数
     */
    private Integer totalCoin;

    private String merchantId;

    /**
     * 购买前数量
     */
    private Integer rechargeBeforeBalance;
    /**
     * 购买后数量
     */
    private Integer rechargeAfterBalance;
    /**
     * 金额套餐选择类型：1、套餐  2、自选
     */
    private Integer optionType;
    /**
     * 到账类型：1.存储在余额，2.直接出币/核销
     */
    private Integer typeOfArrival;
    /**
     * 退款类型  1当天退款  2 隔天退款
     */
    private Integer refundType;

    /**
     * 机构id
     */
    private Integer agencyId;

    /**
     * 渠道id
     */
    private String payCompanyCode;

    /**
     * 01 支付宝，02微信 03纸钞机 04投币器
     */
    private String channelType;

    private Integer userId;

    private Long memberId;

    private String openId;

    /**
     * 操作员ID。场地操作员ID
     */
    private Integer operatorId;

    /**
     * 手续费
     */
    private BigDecimal handlingCharge;


    private BigDecimal totalCommission;

    /**
     * 结算金额
     */
    private BigDecimal settlementMoney;

    /**
     * 支付时间
     */
    private Date gmtPayment;
    /**
     * 支付回调时间，支付系统接收到上游的时间
     */
    private Date notifyTime;

    /**
     * 付款方式
     */
    private String bankType;

    private String payChannelOrderNo;

    private String merchantOrderNo;

    /**
     * 网商支付单号
     */
    private String orderNo;

    private String credit;

    private String buyerLogonId;

    private String buyerUserId;

    /**
     * 0待付款，1成功，2，关闭，3撤销 ,4退单,5失败，6部分退款 7全额退款 8退款中 9退款失败
     */
    private Integer status;
    /**
     * 0 运行中，1 结束
     */
    private Integer shoutStatus;

    /**
     * 结算状态
     */
    private Integer stmtStatus;

    /**
     * 0未分账 1已分账
     */
    private Integer shareStatus;
    /**出货状态：0.待出货，1.成功，2.失败，3.部分失败*/
    private Integer shipmentStatus;

    /**
     * 结算时间
     */
    private Date stmtDateTime;

    /**
     * 标记
     */
    private Integer flag;

    /**
     * 1=公众号（生活号）,2=扫码 3=被扫
     */
    private Integer function;

    private String notifyUrl;


    private Integer notifyStatus;

    private String notifyResponse;

    /**
     * 回调次数
     */
    private Integer notifyCount;

    /**
     * ip地区  国 省市区
     */
    private String ipRegion;

    /**
     * 备注
     */
    private String remark;
    /**
     * 发起支付订单号
     */
    private String payOrderNo;

    /**
     * ip
     */
    private String ip;

    /**
     * 终端类型：1自助终端deviceNo字段，2人工终端sn字段
     */
    private Integer terminalType;

    /** 是否扣除佣金  1.是 */
    private Integer isDeductCommission;
    /** 抵扣佣金金额 */
    private BigDecimal deductCommission;
    /** 操作商户ID，User表的ID */
    private Integer operationUserId;
}
